// // // fetch.js
// // export async function fetch(url, config = {}) {
// //     // 设置默认请求头
// //     const defaultHeaders = {
// //         'Accept': 'application/json',
// //         'Content-Type': 'application/json',
// //         'Access-Control-Allow-Headers': 'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version',
// //         'Access-Control-Allow-Credentials': 'true'
// //     };
// //
// //     // 合并配置对象
// //     const headers = {
// //         ...defaultHeaders,
// //         ...config.headers,
// //     };
// //
// //     // 发送请求
// //     const response = await window.fetch(url, {
// //         ...config,
// //         headers,
// //     });
// //
// //     // 处理响应
// //     if (response.ok) {
// //         // 成功响应
// //         return response.json();
// //     } else {
// //         // 失败响应
// //         throw new Error(response.statusText);
// //     }
// // }
// import qs from "qs";
// import { getStrapiURL } from "./index";
//
// export async function fetchAPI(
//     path,
//     urlParamsObject = {},
//     options = {}
// ) {
//     try {
//         // Merge default and user options
//         const mergedOptions = {
//             next: { revalidate: 60 },
//             headers: {
//                 "Content-Type": "application/json",
//             },
//             ...options,
//         };
//
//         // Build request URL
//         const queryString = qs.stringify(urlParamsObject);
//         const requestUrl = `${getStrapiURL(
//             `/api${path}${queryString ? `?${queryString}` : ""}`
//         )}`;
//
//         // Trigger API call
//         const response = await fetch(requestUrl, mergedOptions);
//         const data = await response.json();
//         return data;
//
//     } catch (error) {
//         console.error(error);
//         throw new Error(`Please check if your server is running and you set all the required tokens.`);
//     }
// }
//
// // fetch.js
// export async function fetch(url, config = {
//     method: 'GET'
// }) {
//     console.log('FETCHconfig', config);
//     // 设置默认请求头
//     const defaultHeaders = {
//         'Accept': 'application/json',
//         'Content-Type': 'application/json',
//         'Access-Control-Allow-Headers': 'X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version',
//         'Access-Control-Allow-Credentials': 'true'
//     };
//
//     // 合并配置对象
//     const headers = {
//         ...defaultHeaders,
//         ...config.headers,
//     };
//     let requestUrl = url;
//     if (config.params && Object.keys(config.params).length) {
//         let queryStr = '?';
//         const queryArr = [];
//         for (const d in config.params){
//             queryStr += d + '=' + `${config.params[d]}` + '&'
//         };
//         queryStr = queryStr.slice(0, -1)
//         console.log('queryStr', queryStr);
//         requestUrl+=queryStr;
//     }
//     let options = {
//         ...config,
//         headers,
//         body: JSON.stringify(config.data),
//         query: JSON.stringify(config.data),
//     };
//     if (config.data && Object.keys(config.data).length) options.body = JSON.stringify(config.data);
//     // 发送请求
//     const response = await window.fetch(requestUrl, {
//         ...options
//     });
//     // 处理响应
//     if (response.ok) {
//         // 成功响应
//         return response.json();
//     } else {
//         // 失败响应
//         throw new Error(response.statusText);
//     }
// }
import axios, { InternalAxiosRequestConfig } from 'axios';

declare global {
    interface Window {
        location: Location;
    }
}

// const baseURL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3000';

const axiosInstance = axios.create({
    baseURL: '',
    timeout: 10000,
    headers: {
        'Content-Type': 'application/json',
    },
});

// 请求拦截器
axiosInstance.interceptors.request.use(
    (config: InternalAxiosRequestConfig) => {
        if (typeof window !== 'undefined') {
            const token = localStorage.getItem('token');
            if (token) {
                config.headers.Authorization = `Bearer ${token}`;
            }
        }
        return config;
    },
    (error: any) => {
        return Promise.reject(error);
    }
);

// 响应拦截器
axiosInstance.interceptors.response.use(
    (response: any) => {
        return response.data;
    },
    (error: any) => {
        if (error.response) {
            switch (error.response.status) {
                case 401:
                    if (typeof window !== 'undefined') {
                        localStorage.removeItem('token');
                        window.location.href = '/login';
                    }
                    break;
                case 403:
                    console.error('权限不足');
                    break;
                case 404:
                    console.error('请求的资源不存在');
                    break;
                default:
                    console.error('服务器错误');
            }
        }
        return Promise.reject(error);
    }
);

export const fetch = axiosInstance;
